Alright, let's reply by parts
1) Private addresses
ipv6 has different "scopes" so you can have a local scope and a global scope, ipv6 is smart enough to know who's what and to regulate traffic accordingly so you can have a local non-routable network on ipv6 without any problem at all, actually it comes by default as that
2) Dump ipv4 and run only ipv6
All ipv6 implementations so far are dual stack so you can comfortably run both, and I would definitely recommend you to run both, there's no damage in doing that and ipv4 is not going away for a long time, although ipv6 is very cool completely dropping ipv4 is not something I would do.
3) Short questions
a) No technical disadvantages, on the contrary! Lots of cool stuff, automatic assignation of addresses, anycast, native ipsec, it's quite cool
b) Firewalls should be good, but there's some specific firewall rules that you should pay attention to like allowing local-link scope traffic, allow multicast on ipv6 and disable processing of RH0 packets, also have in mind that icmpv6 is a completely new protocol and ipv6 is a lot more dependant on it than icmp on ipv4 so filtering it is not a good idea
c) As far as I know most of linux services support ipv6 without any problem, dual stack ftw!
Also it's not bad to get yourself familiar with all the ipv6 new specs, have a look at http://en.wikipedia.org/wiki/IPv6 for starters
A switch doesn't know about IP.
Switches forward Ethernet frames. They don't need to know anything about the protocols at higher layers.
If it is a managed switch it may have a web interface used to configure the switch over IP. Such an interface could support IPv4 or IPv6 or both. However which IP protocol you use to configure the switch doesn't influence what protocols you can use through the switch. You can even send non-IP protocols through a switch.
A managed switch may also have features going beyond switching, some of those features may operate on the IP layer. Some products take this so far that they are actually fully capable routers. Whether a specific device is acting as a switch or a router can depend on how it is configured.
The lack of IPv6 access for hosts connected to the network is unlikely to be caused by the switches, it is more likely caused by the router or the ISP not supporting IPv6.
Best Answer
Get an IPv6 allocation from your ISP or RIR.
Define an address plan to cover the number of /64s you need, as far forward as you can project. The smallest you should ask for is a /48, a typical size given to one "site". Plan out all your needs, external services, VPNs, LAN, and test networks, across multiple sites if you plan to grow.
Your prefix is to with as you wish, as your ISP routes it to you. If you want to use a few /64s for VPNs, route those to the VPN server.
Unique local address is not for internet access. While ULA can be useful for LAN only resources and labs, you really want a globally routable prefix.
Generate a ULA /48 with "fd" plus 40 random bits. This is extremely likely to be unique with any other networks you may encounter. One easy way: install subnetcalc (it has a Debian package) and