1) "A lot of the database queries that we are running during the days are db intensive and lock a lot of the tables while executing."
Have you thought of trying the snapshot isolation level? It is useful when:
"Reader/writer blocking occurs to the point that concurrency benefits outweigh increased overhead of creating and managing row versions.
An application requires absolute accuracy for long-running aggregations or queries where data values must be consistent to the point in time that a query starts."
Have you tried to use database snapshots? They are: "a read-only, static view of a database (the source database)...Each database snapshot is transactionally consistent with the source database as of the moment of the snapshot's creation. Snapshots can be used for reporting purposes."
You could move the blocking queries there and get rid of some of the problems (release blocking, but this will increase space usage, so need to put in balance). But this means you'll need to change some part of the application that accesses the db to redirect the big calls to the snapshot. I guess that read committed snapshot enabled at db level will be easiest to verify.
If none of the options suit your needs, then I guess you could try using a replication server, but I'd try those before, as they are a bit less PITA then a replication :-).
2) "I was wondering if there is a "best way" to setup a replication server so we can run the queries on it without locking the main db server".
I'm not sure if there is a best way to setup a replication server, as it's a usual database server. Maybe you should ensure it's closest to the production server (probably better in the same switch, the bandwidth as big as possible, latency as small as possible).
In case that the replication is very busy, then another option would be to configure the distributor (the replication witness) on a distinct server.
Anyway, even if you read data from the replication server instead of the main server, this doesn't mean you'll get rid of blocking completely, as the blocking queries could block the replication db, which will cause delays in replication delivery, you'll only move the problem a bit further.